package Risk.IHM;

import Risk.Moteur.Pays;

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSlider;

/**
 *
 * @author alex
 */
public class JDialogManoeuvre extends JDialog implements ActionListener {
    private static JDialogManoeuvre	instance         = null;
    private static final long		serialVersionUID = 1L;
    private Pays			arrive;
    private Pays			depart;
    private JButton			jbAnnul;
    private JButton			jbDeplacer;
    private JButton			jbToutDeplacer;
    private JLabel			jl;
    private JPanel			jpBout;
    private JSlider			jsManoeuvre;
    private int				max;
    private int				min;
    private PlateauIhm			pihm;

    /**
     * creation du JDialog pour la manouevre
     */
    private JDialogManoeuvre(PlateauIhm ihm) {
	super(ihm, "Deplacement des troupes");
	this.pihm = ihm;
	depart    = null;
	arrive    = null;
	this.setLayout(new GridLayout(3, 1));
	jl = new JLabel();

	// le slider
	jsManoeuvre = new JSlider();
	jsManoeuvre.setValue(1);
	jsManoeuvre.setMajorTickSpacing(1);
	jsManoeuvre.setMinorTickSpacing(1);
	jsManoeuvre.setPaintTicks(true);
	jsManoeuvre.setPaintLabels(true);
	jpBout     = new JPanel(new GridLayout(1, 3));
	jbDeplacer = new JButton(" Deplacer ");
	jbDeplacer.addActionListener(this);
	jbToutDeplacer = new JButton(" Tout deplacer ");
	jbToutDeplacer.addActionListener(this);
	jbAnnul = new JButton(" Annuler ");
	jbAnnul.addActionListener(this);
	jpBout.add(jbDeplacer);
	jpBout.add(jbToutDeplacer);
	jpBout.add(jbAnnul);
	this.getContentPane().add(jl);
	this.getContentPane().add(jsManoeuvre);
	this.getContentPane().add(jpBout);
	this.setVisible(true);
	this.pack();
    }

    public void actionPerformed(ActionEvent e) {
	Object	o = (JButton) e.getSource();

	if (o.equals(jbDeplacer)) {
	    pihm.getRisk().manoeuvreJoueurCourant(depart, arrive, jsManoeuvre.getValue());

	    if (ConnexionServeurIHM.CONNECTE) {
		pihm.getJtaConsole().append(pihm.getRisk().getTc().envoieInformationsPays(depart) + "\n");
		pihm.getJtaConsole().append(pihm.getRisk().getTc().envoieInformationsPays(arrive) + "\n");
	    }

	    this.setVisible(false);
	    pihm.modifierTexte("Deplacement de " + jsManoeuvre.getValue() + " soldats de " + depart + " vers "
			       + arrive);
	    pihm.getImgCarte().effaceSelection();
	    pihm.repaint();
	    pihm.getRisk().phaseSuivante();
	}

	if (o.equals(jbToutDeplacer)) {
	    if (pihm.getRisk().manoeuvreJoueurCourant(depart, arrive, max)) {
		pihm.modifierTexte("Deplacement de " + max + " soldats de " + depart + " vers " + arrive);

		if (ConnexionServeurIHM.CONNECTE) {
		    pihm.getJtaConsole().append(pihm.getRisk().getTc().envoieInformationsPays(depart) + "\n");
		    pihm.getJtaConsole().append(pihm.getRisk().getTc().envoieInformationsPays(arrive) + "\n");
		}
	    }

	    this.setVisible(false);
	    pihm.getImgCarte().effaceSelection();
	    pihm.repaint();
	    pihm.getRisk().phaseSuivante();
	}

	if (o.equals(jbAnnul)) {
	    this.setVisible(false);
	    pihm.getImgCarte().effaceSelection();
	    pihm.repaint();
	}
    }

    public static JDialogManoeuvre getInstance(PlateauIhm ihm, Pays depart, Pays arrive) {
	if (instance == null) {
	    instance = new JDialogManoeuvre(ihm);
	}

	instance.setVisible(true);
	instance.setDepart(depart);
	instance.setArrive(arrive);

	return instance;
    }

    public void setArrive(Pays arrive) {
	this.arrive = arrive;
	jl.setText((" Deplacez des armees du " + depart + " vers " + arrive).toUpperCase());
    }

    public void setDepart(Pays depart) {
	this.depart = depart;
	max         = depart.getNbArmee() - 1;
	min         = 1;
	jsManoeuvre.setMinimum(min);
	jsManoeuvre.setMaximum(max);
    }
}
